'use strict';

module.exports = (options, app) => {
  return async (ctx, next) => {
    let authToken = ctx.header.authorization; // 获取header里面的authorization
    if (authToken) {
      authToken = authToken.split(' ')[1];
      try {
        const result = ctx.checkToken(authToken) || {};
        if (result.id && result.contact) {
          let redis_token = await app.redis.get(result.id);
          if (redis_token) {
            redis_token = redis_token.split(' ')[1];
            if (redis_token === authToken) {
              app.redis.expire(result.id, 60 * 30);
              app.redis.expire(result.id + 'u', 60 * 30);
              await next();
            } else {
              ctx.body = {
                state: 50012,
                msg: '您的账号已在其他地方登录',
              };
            }
          } else {
            ctx.body = {
              state: 5008,
              msg: '登录状态已过期',
            };
          }
        }
      } catch (error) {
        if (error.name === 'JsonWebTokenError') {
          ctx.body = {
            state: 5004,
            msg: '请登录后再进行操作',
          };
        }
        if (error.name === 'TokenExpiredError') {
          ctx.body = {
            state: 5008,
            msg: '登录状态已过期',
          };
        }
      }
    } else {
      ctx.body = {
        code: 5002,
        msg: '请登录后再进行操作',
      };
    }
  };
};
